#include <my_header.h>
// 通过c_api创建一个数据库连接, 使用事务处理机制, 操作一组sql执行
/* Usage:  ./5_sql_transaction*/
int main(void){                                  
    
    MYSQL *mysql = mysql_init(NULL); // 初始化连接 
    MYSQL_ERROR(mysql);

    mysql_set_character_set(mysql, "utf8mb4");
    // 建立连接
    mysql_real_connect(mysql, "localhost", "root", "123456", "homework", 0, NULL, 0);
    MYSQL_ERROR(mysql);

    // 开启事务
    mysql_autocommit(mysql, 0);

    // update 更新
    mysql_query(mysql, "update capi set age = 13 where age < 18");
    int ret = mysql_query(mysql, "update capi set age = 18 where age <20");
    if(ret != 0)
    {
        printf("回滚事务 \n");
        mysql_rollback(mysql);
    }else
    {
        printf("提交事务 \n");
        mysql_commit(mysql);
    }
    // 恢复自动提交事务模式
    mysql_autocommit(mysql, 1);
    printf("恢复自动提交事务模式 \n");

    mysql_query(mysql, "select * from capi");
    MYSQL_RES *res;
    res = mysql_store_result(mysql);// 获得结果集
    if(res == NULL)
    {
        fprintf(stderr, "mysql_store_result() 返回NULL %s \n", mysql_error(mysql));
    }
    my_ulonglong num_rows = mysql_num_rows(res);
    if(num_rows == 0)
    {
        printf("未找到任何行。 \n");
    }else{
        printf("行数：%lu \n", num_rows);
    }

    MYSQL_ROW row;
    // 获取列数
    unsigned int fields= mysql_num_fields(res);
    while((row = mysql_fetch_row(res)) != NULL)
    {
        for(int i=0; i<fields; i++)
        {
            printf("%s \t", row[i]);
        }
        printf("\n");
    }
    mysql_num_fields(res);
    // 释放结果
    mysql_free_result(res);
    // 关闭连接
    mysql_close(mysql);
    return 0;
}


